package org.metasketch.ham.diagrams;

import org.metasketch.diagram.javafx.graphics.DefaultLink;
import org.metasketch.diagram.javafx.graphics.HorizontalLinkLabelPosition;
import org.metasketch.diagram.javafx.graphics.LinkEndBuilder;
import org.metasketch.diagram.javafx.graphics.PositionedLabel;
import org.metasketch.diagram.javafx.graphics.VerticalLinkLabelPosition;
import org.metasketch.editor.links.LinkEndType;
import org.metasketch.ham.model.HumanActivityRelationLink;
import org.metasketch.ham.model.HumanActivityRelationType;
import org.metasketch.ham.model.HumanParticipationRelationLink;

public class ParticipationLink extends DefaultLink {

	PositionedLabel sourceLabel = new PositionedLabel();

	PositionedLabel targetLabel = new PositionedLabel();

	public ParticipationLink() {

		sourceLabel.getLabel().setText("Center,Center");
		sourceLabel.setHorizontal(HorizontalLinkLabelPosition.SOURCE);
		sourceLabel.setVertical(VerticalLinkLabelPosition.TOP);
		sourceLabel.getLabel().setFieldName("sourceLabel");
		sourceLabel.getLabel().setEditable(true);
		labels.add(sourceLabel);

		targetLabel.getLabel().setText("Center,Center");
		targetLabel.setHorizontal(HorizontalLinkLabelPosition.TARGET);
		targetLabel.setVertical(VerticalLinkLabelPosition.BOTTOM);
		targetLabel.getLabel().setFieldName("targetLabel");
		targetLabel.getLabel().setEditable(true);
		labels.add(targetLabel);

		sourceLabel.getLabel().setGraphic(this);

		targetLabel.getLabel().setGraphic(this);

	}

	@Override
	protected void refreshModelGraphic() {
		super.refreshModelGraphic();

		if (semantic == null)
			return;

		HumanParticipationRelationLink relation = (HumanParticipationRelationLink) semantic;
		// HumanActivityRelationType type = relation.getType();

		if (relation.isShowSourceArrow()) {

			LinkEndBuilder.buildEnd(this, getFirstSection(), LinkEndType.ARROW,
					true);

		}

		if (relation.isShowTargetArrow()) {

			LinkEndBuilder.buildEnd(this, getLastSection(), LinkEndType.ARROW,
					false);

		}

		sourceLabel.getLabel().refreshModelGraphic();
		targetLabel.getLabel().refreshModelGraphic();

		// sourceLabel

		// if ()
		sourceLabel.getLabel().setVisible(relation.isShowSourceLabel());
		targetLabel.getLabel().setVisible(relation.isShowTargetLabel());
		// else if (labels.contains(targetLabel))
		// labels.remove(targetLabel);

		// sourceLabel.getLabel().setText(relation.getSourceLabel());
		// targetLabel.getLabel().setText(relation.getTargetLabel());

		// label.getLabel().setText(type.toString());

		// getChildren().add(label);
	}

	// public void refreshLineDecorations() {
	// // int rest = lines.size() % 2;
	// // if (rest == 0) {
	// // // get the middle control point
	// // int index = lines.size() / 2 - 1;
	// // LineSection line = lines.get(index);
	// // int x = (int) line.getEndX();
	// // int y = (int) line.getEndY();
	// //
	// // x -= label.getWidth() / 2;
	// // y -= 20;
	// //
	// // label.setTranslateX(x);
	// // label.setTranslateY(y);
	// //
	// // } else {
	// // int index = lines.size() / 2;
	// // LineSection line = lines.get(index);
	// //
	// // int x = (int) (line.getStartX() + (line.getEndX() - line
	// // .getStartX()) * 0.5);
	// // int y = (int) (line.getStartY() + (line.getEndY() - line
	// // .getStartY()) * 0.5);
	// //
	// // x -= label.getWidth() / 2;
	// // y -= 20;
	// //
	// // label.setTranslateX(x);
	// // label.setTranslateY(y);
	// // }
	//
	// }

}
